@restnfeel/agentc-starter-kit
Version:
한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템
94 lines (89 loc) • 2.34 kB
text/typescript
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import { PrismaAdapter } from "@next-auth/prisma-adapter";
import { prisma } from "@/lib/prisma";
// 카카오 프로바이더 정의
const KakaoProvider = {
id: "kakao",
name: "Kakao",
type: "oauth" as const,
authorization: {
url: "https://kauth.kakao.com/oauth/authorize",
params: {
scope: "profile_nickname profile_image account_email",
},
},
token: "https://kauth.kakao.com/oauth/token",
userinfo: "https://kapi.kakao.com/v2/user/me",
clientId: process.env.KAKAO_CLIENT_ID,
clientSecret: process.env.KAKAO_CLIENT_SECRET,
profile(profile: any) {
return {
id: profile.id.toString(),
name:
profile.kakao_account?.profile?.nickname ||
profile.properties?.nickname,
email: profile.kakao_account?.email,
image:
profile.kakao_account?.profile?.profile_image_url ||
profile.properties?.profile_image,
};
},
};
// 네이버 프로바이더 정의
const NaverProvider = {
id: "naver",
name: "Naver",
type: "oauth" as const,
authorization: {
url: "https://nid.naver.com/oauth2.0/authorize",
params: {
scope: "name email profile_image",
},
},
token: "https://nid.naver.com/oauth2.0/token",
userinfo: "https://openapi.naver.com/v1/nid/me",
clientId: process.env.NAVER_CLIENT_ID,
clientSecret: process.env.NAVER_CLIENT_SECRET,
profile(profile: any) {
return {
id: profile.response.id,
name: profile.response.name,
email: profile.response.email,
image: profile.response.profile_image,
};
},
};
const handler = NextAuth({
adapter: PrismaAdapter(prisma),
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_CLIENT_ID!,
clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
}),
KakaoProvider,
NaverProvider,
],
callbacks: {
async session({ session, user }) {
if (session?.user) {
session.user.id = user.id;
}
return session;
},
async jwt({ user, token }) {
if (user) {
token.uid = user.id;
}
return token;
},
},
session: {
strategy: "database",
},
pages: {
signIn: "/auth/signin",
error: "/auth/error",
},
});
export { handler as GET, handler as POST };